ಪ್ರಸ್ತಾವಿತ @package ನಿಯಮದೊಂದಿಗೆ CSS ಆರ್ಕಿಟೆಕ್ಚರ್ನ ಭವಿಷ್ಯವನ್ನು ಅನ್ವೇಷಿಸಿ. ನೇಟಿವ್ CSS ಪ್ಯಾಕೇಜ್ ನಿರ್ವಹಣೆ, ಎನ್ಕ್ಯಾಪ್ಸುಲೇಶನ್, ಮತ್ತು ಡಿಪೆಂಡೆನ್ಸಿ ನಿರ್ವಹಣೆಯ ಕುರಿತು ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ.
CSS ನಲ್ಲಿ ಕ್ರಾಂತಿ: ನೇಟಿವ್ ಪ್ಯಾಕೇಜ್ ನಿರ್ವಹಣೆಗಾಗಿ @package ನಿಯಮದ ಒಂದು ಆಳವಾದ ನೋಟ
ದಶಕಗಳಿಂದ, ಡೆವಲಪರ್ಗಳು ಕ್ಯಾಸ್ಕೇಡಿಂಗ್ ಸ್ಟೈಲ್ ಶೀಟ್ಗಳ (CSS) ಅತ್ಯಂತ ಸವಾಲಿನ ವೈಶಿಷ್ಟ್ಯಗಳಲ್ಲಿ ಒಂದಾದ ಅದರ ಜಾಗತಿಕ ಸ್ವರೂಪದೊಂದಿಗೆ ಹೋರಾಡುತ್ತಿದ್ದಾರೆ. ಶಕ್ತಿಯುತವಾಗಿದ್ದರೂ, CSS ನ ಜಾಗತಿಕ ವ್ಯಾಪ್ತಿಯು ಅಸಂಖ್ಯಾತ ಸ್ಪೆಸಿಫಿಸಿಟಿ ಯುದ್ಧಗಳಿಗೆ, ಹೆಸರಿಸುವ ಸಂಪ್ರದಾಯಗಳ ಚರ್ಚೆಗಳಿಗೆ ಮತ್ತು ಆರ್ಕಿಟೆಕ್ಚರಲ್ ತಲೆನೋವುಗಳಿಗೆ ಕಾರಣವಾಗಿದೆ. ಇದನ್ನು ನಿಯಂತ್ರಿಸಲು ನಾವು BEM ವಿಧಾನಗಳಿಂದ ಹಿಡಿದು ಸಂಕೀರ್ಣ JavaScript-ಆಧಾರಿತ ಪರಿಹಾರಗಳವರೆಗೆ CSS ಮೇಲೆ ವಿಸ್ತಾರವಾದ ವ್ಯವಸ್ಥೆಗಳನ್ನು ನಿರ್ಮಿಸಿದ್ದೇವೆ. ಆದರೆ, ಈ ಪರಿಹಾರವು ಲೈಬ್ರರಿ ಅಥವಾ ಸಂಪ್ರದಾಯವಾಗಿರದೆ, CSS ಭಾಷೆಯದ್ದೇ ಒಂದು ನೇಟಿವ್ ಭಾಗವಾಗಿದ್ದರೆ ಹೇಗಿರುತ್ತದೆ? ಇಲ್ಲಿಯೇ CSS ಪ್ಯಾಕೇಜ್ ನಿಯಮದ ಪರಿಕಲ್ಪನೆ ಬರುತ್ತದೆ, ಇದು ನಮ್ಮ ಸ್ಟೈಲ್ಶೀಟ್ಗಳಿಗೆ ನೇರವಾಗಿ ದೃಢವಾದ, ಬ್ರೌಸರ್-ನೇಟಿವ್ ಪ್ಯಾಕೇಜ್ ನಿರ್ವಹಣೆಯನ್ನು ತರುವ ಗುರಿಯನ್ನು ಹೊಂದಿರುವ ಒಂದು ಮುಂದಾಲೋಚನೆಯ ಪ್ರಸ್ತಾಪವಾಗಿದೆ.
ಈ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿಯು ಈ ಪರಿವರ್ತನಾಶೀಲ ಪ್ರಸ್ತಾಪವನ್ನು ಅನ್ವೇಷಿಸುತ್ತದೆ. ಇದು ಪರಿಹರಿಸಲು ಪ್ರಯತ್ನಿಸುವ ಪ್ರಮುಖ ಸಮಸ್ಯೆಗಳನ್ನು ನಾವು ವಿಶ್ಲೇಷಿಸುತ್ತೇವೆ, ಅದರ ಪ್ರಸ್ತಾವಿತ ಸಿಂಟ್ಯಾಕ್ಸ್ ಮತ್ತು ಯಂತ್ರಶಾಸ್ತ್ರವನ್ನು ವಿವರಿಸುತ್ತೇವೆ, ಪ್ರಾಯೋಗಿಕ ಅನುಷ್ಠಾನದ ಉದಾಹರಣೆಗಳನ್ನು ನೋಡುತ್ತೇವೆ ಮತ್ತು ವೆಬ್ ಡೆವಲಪ್ಮೆಂಟ್ನ ಭವಿಷ್ಯಕ್ಕಾಗಿ ಇದರ ಅರ್ಥವೇನು ಎಂಬುದನ್ನು ಗಮನಿಸುತ್ತೇವೆ. ನೀವು ಡಿಸೈನ್ ಸಿಸ್ಟಮ್ ಸ್ಕೇಲೆಬಿಲಿಟಿಯೊಂದಿಗೆ ಹೋರಾಡುತ್ತಿರುವ ಆರ್ಕಿಟೆಕ್ಟ್ ಆಗಿರಲಿ ಅಥವಾ ಕ್ಲಾಸ್ ಹೆಸರುಗಳಿಗೆ ಪ್ರಿಫಿಕ್ಸ್ ಸೇರಿಸಿ ಸುಸ್ತಾಗಿರುವ ಡೆವಲಪರ್ ಆಗಿರಲಿ, CSS ನಲ್ಲಿನ ಈ ವಿಕಾಸವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ನಿರ್ಣಾಯಕವಾಗಿದೆ.
ಪ್ರಮುಖ ಸಮಸ್ಯೆ: CSS ಗೆ ನೇಟಿವ್ ಪ್ಯಾಕೇಜ್ ನಿರ್ವಹಣೆ ಏಕೆ ಬೇಕು
ನಾವು ಪರಿಹಾರವನ್ನು ಶ್ಲಾಘಿಸುವ ಮೊದಲು, ನಾವು ಸಮಸ್ಯೆಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು. ದೊಡ್ಡ ಪ್ರಮಾಣದಲ್ಲಿ CSS ಅನ್ನು ನಿರ್ವಹಿಸುವ ಸವಾಲುಗಳು ಹೊಸದೇನಲ್ಲ, ಆದರೆ ಕಾಂಪೊನೆಂಟ್-ಆಧಾರಿತ ಆರ್ಕಿಟೆಕ್ಚರ್ಗಳು ಮತ್ತು ಬೃಹತ್, ಸಹಯೋಗದ ಪ್ರಾಜೆಕ್ಟ್ಗಳ ಯುಗದಲ್ಲಿ ಅವುಗಳು ಹೆಚ್ಚು ತೀವ್ರವಾಗಿವೆ. ಈ ಸಮಸ್ಯೆಗಳು ಮುಖ್ಯವಾಗಿ ಭಾಷೆಯ ಕೆಲವು ಮೂಲಭೂತ ಗುಣಲಕ್ಷಣಗಳಿಂದ ಉದ್ಭವಿಸುತ್ತವೆ.
ಗ್ಲೋಬಲ್ ನೇಮ್ಸ್ಪೇಸ್ನ ಗೊಂದಲ
CSS ನಲ್ಲಿ, ನೀವು ಬರೆಯುವ ಪ್ರತಿಯೊಂದು ಸೆಲೆಕ್ಟರ್ ಒಂದೇ, ಹಂಚಿಕೆಯ, ಜಾಗತಿಕ ವ್ಯಾಪ್ತಿಯಲ್ಲಿ (global scope) ಇರುತ್ತದೆ. ಹೆಡರ್ ಕಾಂಪೊನೆಂಟ್ನ ಸ್ಟೈಲ್ಶೀಟ್ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ .button ಕ್ಲಾಸ್, ಫೂಟರ್ ಕಾಂಪೊನೆಂಟ್ನ ಸ್ಟೈಲ್ಶೀಟ್ನಲ್ಲಿ ಉಲ್ಲೇಖಿಸಲಾದ ಅದೇ .button ಕ್ಲಾಸ್ ಆಗಿರುತ್ತದೆ. ಇದು ತಕ್ಷಣವೇ ಘರ್ಷಣೆಯ (collision) ಹೆಚ್ಚಿನ ಅಪಾಯವನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.
ಒಂದು ಸರಳ, ಸಾಮಾನ್ಯ ಸನ್ನಿವೇಶವನ್ನು ಪರಿಗಣಿಸಿ. ನಿಮ್ಮ ತಂಡವು ಸುಂದರವಾದ ಕಾರ್ಡ್ ಕಾಂಪೊನೆಂಟ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುತ್ತದೆ:
.card { background: white; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); }
.title { font-size: 1.5em; color: #333; }
ನಂತರ, ಬೇರೊಂದು ತಂಡವು ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಬ್ಲಾಗ್ ವಿಜೆಟ್ ಅನ್ನು ಸಂಯೋಜಿಸುತ್ತದೆ, ಅದು ಕೂಡ .card ಮತ್ತು .title ಎಂಬ ಸಾಮಾನ್ಯ ಕ್ಲಾಸ್ ಹೆಸರುಗಳನ್ನು ಬಳಸುತ್ತದೆ, ಆದರೆ ಸಂಪೂರ್ಣವಾಗಿ ವಿಭಿನ್ನವಾದ ಶೈಲಿಯೊಂದಿಗೆ. ಇದ್ದಕ್ಕಿದ್ದಂತೆ, ನಿಮ್ಮ ಕಾರ್ಡ್ ಕಾಂಪೊನೆಂಟ್ ಹಾಳಾಗುತ್ತದೆ, ಅಥವಾ ಬ್ಲಾಗ್ ವಿಜೆಟ್ ತಪ್ಪಾಗಿ ಕಾಣುತ್ತದೆ. ಕೊನೆಯದಾಗಿ ಲೋಡ್ ಆದ ಸ್ಟೈಲ್ಶೀಟ್ ಗೆಲ್ಲುತ್ತದೆ, ಮತ್ತು ನೀವು ಈಗ ಸ್ಪೆಸಿಫಿಸಿಟಿ ಅಥವಾ ಸೋರ್ಸ್-ಆರ್ಡರ್ ಸಮಸ್ಯೆಯನ್ನು ಡೀಬಗ್ ಮಾಡುತ್ತಿರುತ್ತೀರಿ. ಈ ಜಾಗತಿಕ ಸ್ವರೂಪವು ಡೆವಲಪರ್ಗಳನ್ನು ರಕ್ಷಣಾತ್ಮಕ ಕೋಡಿಂಗ್ ಮಾದರಿಗಳಿಗೆ ಒತ್ತಾಯಿಸುತ್ತದೆ.
ಡಿಪೆಂಡೆನ್ಸಿ ನಿರ್ವಹಣೆಯ ನರಕ
ಆಧುನಿಕ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಅಪರೂಪವಾಗಿ ಮೊದಲಿನಿಂದ ನಿರ್ಮಿಸಲಾಗುತ್ತದೆ. ನಾವು ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಲೈಬ್ರರಿಗಳು, UI ಕಿಟ್ಗಳು ಮತ್ತು ಫ್ರೇಮ್ವರ್ಕ್ಗಳ ಶ್ರೀಮಂತ ಪರಿಸರ ವ್ಯವಸ್ಥೆಯನ್ನು ಅವಲಂಬಿಸಿದ್ದೇವೆ. ಈ ಡಿಪೆಂಡೆನ್ಸಿಗಳ ಶೈಲಿಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು ಸಾಮಾನ್ಯವಾಗಿ ಒಂದು ಸೂಕ್ಷ್ಮ ಪ್ರಕ್ರಿಯೆಯಾಗಿದೆ. ನೀವು ಒಂದು ಬೃಹತ್, ಏಕಶಿಲೆಯ CSS ಫೈಲ್ ಅನ್ನು ಇಂಪೋರ್ಟ್ ಮಾಡಿ ಮತ್ತು ನಿಮಗೆ ಬೇಕಾದುದನ್ನು ಓವರ್ರೈಡ್ ಮಾಡುತ್ತೀರಾ, ಏನನ್ನೂ ಹಾಳು ಮಾಡುವುದಿಲ್ಲ ಎಂದು ಆಶಿಸುತ್ತೀರಾ? ಲೈಬ್ರರಿಯ ಲೇಖಕರು ತಮ್ಮ ಎಲ್ಲಾ ಕ್ಲಾಸ್ಗಳನ್ನು ನಿಮ್ಮ ಕೋಡ್ನೊಂದಿಗೆ ಸಂಘರ್ಷವನ್ನು ತಪ್ಪಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ನೇಮ್ಸ್ಪೇಸ್ ಮಾಡಿದ್ದಾರೆಂದು ನೀವು ನಂಬುತ್ತೀರಾ? ಈ ಔಪಚಾರಿಕ ಡಿಪೆಂಡೆನ್ಸಿ ಮಾದರಿಯ ಕೊರತೆಯಿಂದಾಗಿ ನಾವು ಎಲ್ಲವನ್ನೂ ಒಂದೇ, ಬೃಹತ್ CSS ಫೈಲ್ಗೆ ಬಂಡಲ್ ಮಾಡಲು ಆಶ್ರಯಿಸುತ್ತೇವೆ, ಇದರಿಂದ ಶೈಲಿಗಳು ಎಲ್ಲಿಂದ ಹುಟ್ಟಿಕೊಂಡಿವೆ ಎಂಬ ಸ್ಪಷ್ಟತೆ ಕಳೆದುಹೋಗುತ್ತದೆ ಮತ್ತು ನಿರ್ವಹಣೆಯ ದುಃಸ್ವಪ್ನವನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.
ಪ್ರಸ್ತುತ ಪರಿಹಾರಗಳ ನ್ಯೂನತೆಗಳು
ಈ ಮಿತಿಗಳನ್ನು ನಿವಾರಿಸಲು ಪರಿಹಾರಗಳನ್ನು ರಚಿಸುವಲ್ಲಿ ಡೆವಲಪರ್ ಸಮುದಾಯವು ನಂಬಲಾಗದಷ್ಟು ನವೀನವಾಗಿದೆ. ಆದಾಗ್ಯೂ, ಪ್ರತಿಯೊಂದೂ ತನ್ನದೇ ಆದ ವಹಿವಾಟುಗಳೊಂದಿಗೆ ಬರುತ್ತದೆ:
- ವಿಧಾನಗಳು (BEM ನಂತಹವು): ಬ್ಲಾಕ್, ಎಲಿಮೆಂಟ್, ಮಾಡಿಫೈಯರ್ (Block, Element, Modifier) ವಿಧಾನವು ನೇಮ್ಸ್ಪೇಸಿಂಗ್ ಅನ್ನು ಅನುಕರಿಸಲು ಕಟ್ಟುನಿಟ್ಟಾದ ಹೆಸರಿಸುವ ಸಂಪ್ರದಾಯವನ್ನು (ಉದಾ.,
.card__title--primary) ಸೃಷ್ಟಿಸುತ್ತದೆ. ಪ್ರಯೋಜನ: ಇದು ಕೇವಲ CSS ಮತ್ತು ಯಾವುದೇ ಪರಿಕರಗಳ ಅಗತ್ಯವಿಲ್ಲ. ಅನಾನುಕೂಲತೆ: ಇದು ಬಹಳ ದೀರ್ಘ ಮತ್ತು ವಿವರಣಾತ್ಮಕ ಕ್ಲಾಸ್ ಹೆಸರುಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು, ಸಂಪೂರ್ಣವಾಗಿ ಡೆವಲಪರ್ ಶಿಸ್ತನ್ನು ಅವಲಂಬಿಸಿದೆ, ಮತ್ತು ನಿಜವಾದ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಶನ್ ನೀಡುವುದಿಲ್ಲ. ಹೆಸರಿಸುವಲ್ಲಿನ ಒಂದು ತಪ್ಪು ಇನ್ನೂ ಶೈಲಿ ಸೋರಿಕೆಗೆ ಕಾರಣವಾಗಬಹುದು. - ಬಿಲ್ಡ್-ಟೈಮ್ ಪರಿಕರಗಳು (CSS Modules ನಂತಹವು): ಈ ಪರಿಕರಗಳು ನಿಮ್ಮ CSS ಅನ್ನು ಬಿಲ್ಡ್ ಸಮಯದಲ್ಲಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿ, ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅನನ್ಯ ಕ್ಲಾಸ್ ಹೆಸರುಗಳನ್ನು (ಉದಾ.,
.card_title_a8f3e) ಉತ್ಪಾದಿಸುತ್ತವೆ. ಪ್ರಯೋಜನ: ಇದು ನಿಜವಾದ, ಫೈಲ್-ಮಟ್ಟದ ಸ್ಕೋಪ್ ಪ್ರತ್ಯೇಕತೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಅನಾನುಕೂಲತೆ: ಇದಕ್ಕೆ ನಿರ್ದಿಷ್ಟ ಬಿಲ್ಡ್ ಪರಿಸರದ (ವೆಬ್ಪ್ಯಾಕ್ ಅಥವಾ ವೈಟ್ ನಂತಹ) ಅಗತ್ಯವಿದೆ, ನೀವು ಬರೆಯುವ CSS ಮತ್ತು ನೀವು ನೋಡುವ HTML ನಡುವಿನ ನೇರ ಸಂಪರ್ಕವನ್ನು ಮುರಿಯುತ್ತದೆ, ಮತ್ತು ಇದು ನೇಟಿವ್ ಬ್ರೌಸರ್ ವೈಶಿಷ್ಟ್ಯವಲ್ಲ. - CSS-in-JS: ಸ್ಟೈಲ್ಡ್ ಕಾಂಪೊನೆಂಟ್ಸ್ ಅಥವಾ ಎಮೋಷನ್ನಂತಹ ಲೈಬ್ರರಿಗಳು ನಿಮ್ಮ JavaScript ಕಾಂಪೊನೆಂಟ್ ಫೈಲ್ಗಳಲ್ಲೇ ನೇರವಾಗಿ CSS ಬರೆಯಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತವೆ. ಪ್ರಯೋಜನ: ಇದು ಶಕ್ತಿಯುತ, ಕಾಂಪೊನೆಂಟ್-ಮಟ್ಟದ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಶನ್ ಮತ್ತು ಡೈನಾಮಿಕ್ ಸ್ಟೈಲಿಂಗ್ ಅನ್ನು ನೀಡುತ್ತದೆ. ಅನಾನುಕೂಲತೆ: ಇದು ರನ್ಟೈಮ್ ಓವರ್ಹೆಡ್ ಅನ್ನು ಪರಿಚಯಿಸಬಹುದು, JavaScript ಬಂಡಲ್ ಗಾತ್ರವನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ, ಮತ್ತು ಸಾಂಪ್ರದಾಯಿಕ ಕಾಳಜಿಗಳ ಪ್ರತ್ಯೇಕತೆಯನ್ನು (separation of concerns) ಮಸುಕುಗೊಳಿಸುತ್ತದೆ, ಇದು ಅನೇಕ ತಂಡಗಳಿಗೆ ವಿವಾದದ ವಿಷಯವಾಗಿದೆ.
- Shadow DOM: ವೆಬ್ ಕಾಂಪೊನೆಂಟ್ಸ್ ಸೂಟ್ನ ಭಾಗವಾಗಿರುವ ಒಂದು ನೇಟಿವ್ ಬ್ರೌಸರ್ ತಂತ್ರಜ್ಞಾನ, ಇದು ಸಂಪೂರ್ಣ DOM ಮತ್ತು ಶೈಲಿ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಶನ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ. ಪ್ರಯೋಜನ: ಇದು ಲಭ್ಯವಿರುವ ಅತ್ಯಂತ ಪ್ರಬಲವಾದ ಪ್ರತ್ಯೇಕತೆಯ ರೂಪವಾಗಿದೆ. ಅನಾನುಕೂಲತೆ: ಇದರೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು ಸಂಕೀರ್ಣವಾಗಬಹುದು, ಮತ್ತು ಹೊರಗಿನಿಂದ ಕಾಂಪೊನೆಂಟ್ಗಳನ್ನು ಸ್ಟೈಲಿಂಗ್ ಮಾಡಲು (ಥೀಮಿಂಗ್) CSS ಕಸ್ಟಮ್ ಪ್ರಾಪರ್ಟೀಸ್ ಅಥವಾ
::partಬಳಸಿ ಉದ್ದೇಶಪೂರ್ವಕ ವಿಧಾನದ ಅಗತ್ಯವಿದೆ. ಇದು ಜಾಗತಿಕ ಸಂದರ್ಭದಲ್ಲಿ CSS ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಪರಿಹಾರವಲ್ಲ.
ಈ ಎಲ್ಲಾ ವಿಧಾನಗಳು ಮಾನ್ಯ ಮತ್ತು ಉಪಯುಕ್ತವಾಗಿದ್ದರೂ, ಅವುಗಳು ತಾತ್ಕಾಲಿಕ ಪರಿಹಾರಗಳಾಗಿವೆ. CSS ಪ್ಯಾಕೇಜ್ ನಿಯಮದ ಪ್ರಸ್ತಾಪವು ಸ್ಕೋಪ್, ಡಿಪೆಂಡೆನ್ಸಿಗಳು ಮತ್ತು ಪಬ್ಲಿಕ್ API ಗಳ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ನೇರವಾಗಿ ಭಾಷೆಯಲ್ಲಿ ನಿರ್ಮಿಸುವ ಮೂಲಕ ಸಮಸ್ಯೆಯ ಮೂಲವನ್ನು ಪರಿಹರಿಸುವ ಗುರಿಯನ್ನು ಹೊಂದಿದೆ.
CSS @package ನಿಯಮವನ್ನು ಪರಿಚಯಿಸುವುದು: ಒಂದು ನೇಟಿವ್ ಪರಿಹಾರ
ಇತ್ತೀಚಿನ W3C ಪ್ರಸ್ತಾಪಗಳಲ್ಲಿ ಅನ್ವೇಷಿಸಲಾದ CSS ಪ್ಯಾಕೇಜ್ ಪರಿಕಲ್ಪನೆಯು ಒಂದೇ @package ಅಟ್-ರೂಲ್ ಬಗ್ಗೆ ಅಲ್ಲ, ಬದಲಿಗೆ ಪ್ಯಾಕೇಜಿಂಗ್ ವ್ಯವಸ್ಥೆಯನ್ನು ರಚಿಸಲು ಒಟ್ಟಾಗಿ ಕೆಲಸ ಮಾಡುವ ಹೊಸ ಮತ್ತು ವರ್ಧಿತ ವೈಶಿಷ್ಟ್ಯಗಳ ಸಂಗ್ರಹವಾಗಿದೆ. ಒಂದು ಸ್ಟೈಲ್ಶೀಟ್ಗೆ ಸ್ಪಷ್ಟವಾದ ಗಡಿಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಅವಕಾಶ ನೀಡುವುದು ಇದರ ಪ್ರಮುಖ ಆಲೋಚನೆಯಾಗಿದೆ, ಅದರ ಆಂತರಿಕ ಶೈಲಿಗಳನ್ನು ಡಿಫಾಲ್ಟ್ ಆಗಿ ಖಾಸಗಿಯಾಗಿರಿಸಿ, ಇತರ ಸ್ಟೈಲ್ಶೀಟ್ಗಳ ಬಳಕೆಗೆ ಸಾರ್ವಜನಿಕ API ಅನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಬಹಿರಂಗಪಡಿಸುವುದು.
ಪ್ರಮುಖ ಪರಿಕಲ್ಪನೆಗಳು ಮತ್ತು ಸಿಂಟ್ಯಾಕ್ಸ್
ಈ ವ್ಯವಸ್ಥೆಯ ಅಡಿಪಾಯವು ಎರಡು ಪ್ರಾಥಮಿಕ ಅಟ್-ರೂಲ್ಗಳ ಮೇಲೆ ನಿಂತಿದೆ: @export ಮತ್ತು ಆಧುನೀಕರಿಸಿದ @import. ಒಂದು ಸ್ಟೈಲ್ಶೀಟ್ ಈ ನಿಯಮಗಳ ಬಳಕೆಯಿಂದ "ಪ್ಯಾಕೇಜ್" ಆಗುತ್ತದೆ.
1. ಡಿಫಾಲ್ಟ್ ಆಗಿ ಗೌಪ್ಯತೆ (Privacy by Default): ಪ್ಯಾಕೇಜ್ನ (ವಿತರಣೆಗಾಗಿ ಉದ್ದೇಶಿಸಲಾದ CSS ಫೈಲ್) ಒಳಗಿನ ಎಲ್ಲಾ ಶೈಲಿಗಳನ್ನು ಸ್ಥಳೀಯ ಅಥವಾ ಖಾಸಗಿ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ ಎಂಬುದು ಆಲೋಚನೆಯಲ್ಲಿನ ಮೂಲಭೂತ ಬದಲಾವಣೆಯಾಗಿದೆ. ಅವುಗಳನ್ನು ಎನ್ಕ್ಯಾಪ್ಸುಲೇಟ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಸ್ಪಷ್ಟವಾಗಿ ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡದ ಹೊರತು ಜಾಗತಿಕ ವ್ಯಾಪ್ತಿ ಅಥವಾ ಇತರ ಪ್ಯಾಕೇಜ್ಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ.
2. @export ನೊಂದಿಗೆ ಸಾರ್ವಜನಿಕ API: ಥೀಮಿಂಗ್ ಮತ್ತು ಪರಸ್ಪರ ಕಾರ್ಯಸಾಧ್ಯತೆಗೆ ಅನುವು ಮಾಡಿಕೊಡಲು, ಪ್ಯಾಕೇಜ್ @export ಅಟ್-ರೂಲ್ ಬಳಸಿ ಸಾರ್ವಜನಿಕ API ಅನ್ನು ರಚಿಸಬಹುದು. "ಇವು ನನ್ನ ಭಾಗಗಳು, ಹೊರಗಿನ ಪ್ರಪಂಚವು ನೋಡಲು ಮತ್ತು ಸಂವಹನ ನಡೆಸಲು ಅನುಮತಿಸಲಾಗಿದೆ" ಎಂದು ಪ್ಯಾಕೇಜ್ ಹೇಳುವ ವಿಧಾನ ಇದಾಗಿದೆ. ಪ್ರಸ್ತುತ, ಈ ಪ್ರಸ್ತಾಪವು ನಾನ್-ಸೆಲೆಕ್ಟರ್ ಆಸ್ತಿಗಳನ್ನು ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡುವುದರ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುತ್ತದೆ.
- CSS ಕಸ್ಟಮ್ ಪ್ರಾಪರ್ಟೀಸ್: ಥೀಮಿಂಗ್ಗಾಗಿ ಪ್ರಾಥಮಿಕ ಯಾಂತ್ರಿಕತೆ.
- ಕೀಫ್ರೇಮ್ ಅನಿಮೇಷನ್ಗಳು: ಸಾಮಾನ್ಯ ಅನಿಮೇಷನ್ಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲು.
- CSS ಲೇಯರ್ಗಳು: ಕ್ಯಾಸ್ಕೇಡ್ ಕ್ರಮವನ್ನು ನಿರ್ವಹಿಸಲು.
- ಇತರ ಸಂಭಾವ್ಯ ಎಕ್ಸ್ಪೋರ್ಟ್ಗಳು: ಭವಿಷ್ಯದ ಪ್ರಸ್ತಾಪಗಳು ಕೌಂಟರ್ಗಳು, ಗ್ರಿಡ್ ಹೆಸರುಗಳು ಮತ್ತು ಹೆಚ್ಚಿನವುಗಳನ್ನು ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡುವುದನ್ನು ಒಳಗೊಂಡಿರಬಹುದು.
ಇದರ ಸಿಂಟ್ಯಾಕ್ಸ್ ನೇರವಾಗಿದೆ:
/* my-theme.css ಒಳಗೆ */
@export --brand-primary: #0a74d9;
@export --border-radius-default: 5px;
@export standard-fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
3. @import ನೊಂದಿಗೆ ನಿಯಂತ್ರಿತ ಬಳಕೆ: ಪರಿಚಿತ @import ನಿಯಮವು ಸೂಪರ್ಚಾರ್ಜ್ ಆಗುತ್ತದೆ. ಇದು ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಇಂಪೋರ್ಟ್ ಮಾಡಲು ಮತ್ತು ಅದರ ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡಿದ API ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಯಾಂತ್ರಿಕತೆಯಾಗುತ್ತದೆ. ಸಾಂಪ್ರದಾಯಿಕ @import ಉಂಟುಮಾಡಬಹುದಾದ ಜಾಗತಿಕ ನೇಮ್ಸ್ಪೇಸ್ನ ಮಾಲಿನ್ಯವನ್ನು ತಡೆಯಲು, ಇದನ್ನು ರಚನಾತ್ಮಕ ರೀತಿಯಲ್ಲಿ ನಿರ್ವಹಿಸಲು ಪ್ರಸ್ತಾಪವು ಹೊಸ ಸಿಂಟ್ಯಾಕ್ಸ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ.
/* app.css ಒಳಗೆ */
@import url("my-theme.css"); /* ಪ್ಯಾಕೇಜ್ ಮತ್ತು ಅದರ ಸಾರ್ವಜನಿಕ API ಅನ್ನು ಇಂಪೋರ್ಟ್ ಮಾಡುತ್ತದೆ */
ಒಮ್ಮೆ ಇಂಪೋರ್ಟ್ ಮಾಡಿದ ನಂತರ, ಅಪ್ಲಿಕೇಶನ್ ತನ್ನದೇ ಆದ ಕಾಂಪೊನೆಂಟ್ಗಳನ್ನು ಸ್ಟೈಲ್ ಮಾಡಲು ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡಿದ ಕಸ್ಟಮ್ ಪ್ರಾಪರ್ಟಿಗಳನ್ನು ಬಳಸಬಹುದು, ಇದು ಥೀಮ್ ಪ್ಯಾಕೇಜ್ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ವಿನ್ಯಾಸ ವ್ಯವಸ್ಥೆಗೆ ಸ್ಥಿರತೆ ಮತ್ತು ಅನುಸರಣೆಯನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಒಂದು ಪ್ರಾಯೋಗಿಕ ಅನುಷ್ಠಾನ: ಕಾಂಪೊನೆಂಟ್ ಪ್ಯಾಕೇಜ್ ನಿರ್ಮಿಸುವುದು
ಸಿದ್ಧಾಂತವು ಉತ್ತಮವಾಗಿದೆ, ಆದರೆ ಇದು ಆಚರಣೆಯಲ್ಲಿ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂದು ನೋಡೋಣ. ನಾವು ಸ್ವಾವಲಂಬಿ, ಥೀಮ್ ಮಾಡಬಹುದಾದ "Alert" ಕಾಂಪೊನೆಂಟ್ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ನಿರ್ಮಿಸುತ್ತೇವೆ, ಇದು ತನ್ನದೇ ಆದ ಖಾಸಗಿ ಶೈಲಿಗಳನ್ನು ಮತ್ತು ಕಸ್ಟಮೈಸೇಶನ್ಗಾಗಿ ಸಾರ್ವಜನಿಕ API ಅನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.
ಹಂತ 1: ಪ್ಯಾಕೇಜ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವುದು (`alert-component.css`)
ಮೊದಲಿಗೆ, ನಾವು ನಮ್ಮ ಕಾಂಪೊನೆಂಟ್ಗಾಗಿ CSS ಫೈಲ್ ಅನ್ನು ರಚಿಸುತ್ತೇವೆ. ಈ ಫೈಲ್ ನಮ್ಮ "ಪ್ಯಾಕೇಜ್" ಆಗಿದೆ. ನಾವು ಅಲರ್ಟ್ನ ಮೂಲ ರಚನೆ ಮತ್ತು ನೋಟವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತೇವೆ. ನಾವು ಯಾವುದೇ ವಿಶೇಷ ವ್ರ್ಯಾಪರ್ ನಿಯಮವನ್ನು ಬಳಸುತ್ತಿಲ್ಲ ಎಂಬುದನ್ನು ಗಮನಿಸಿ; ಫೈಲ್ ಸ್ವತಃ ಪ್ಯಾಕೇಜ್ನ ಗಡಿಯಾಗಿದೆ.
/* alert-component.css */
/* --- ಸಾರ್ವಜನಿಕ API --- */
/* ಇವು ನಮ್ಮ ಕಾಂಪೊನೆಂಟ್ನ ಕಸ್ಟಮೈಸ್ ಮಾಡಬಹುದಾದ ಭಾಗಗಳು. */
@export --alert-bg-color: #e6f7ff;
@export --alert-border-color: #91d5ff;
@export --alert-text-color: #0056b3;
@export --alert-border-radius: 4px;
/* --- ಖಾಸಗಿ ಶೈಲಿಗಳು --- */
/* ಈ ಶೈಲಿಗಳು ಈ ಪ್ಯಾಕೇಜ್ನೊಳಗೆ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಟ್ ಆಗಿವೆ.
ಅವು ತಮ್ಮ ಮೌಲ್ಯಗಳಿಗಾಗಿ ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡಲಾದ ಕಸ್ಟಮ್ ಪ್ರಾಪರ್ಟಿಗಳನ್ನು ಬಳಸುತ್ತವೆ.
ಇದನ್ನು ಅಂತಿಮವಾಗಿ `@scope` ನೊಂದಿಗೆ ಸಂಯೋಜಿಸಿದಾಗ `.alert` ಕ್ಲಾಸ್ ಸ್ಕೋಪ್ ಆಗುತ್ತದೆ. */
.alert {
padding: 1em 1.5em;
border: 1px solid var(--alert-border-color);
background-color: var(--alert-bg-color);
color: var(--alert-text-color);
border-radius: var(--alert-border-radius);
display: flex;
align-items: center;
gap: 0.75em;
}
.alert-icon {
/* ಅಲರ್ಟ್ನೊಳಗಿನ ಐಕಾನ್ಗಾಗಿ ಹೆಚ್ಚಿನ ಖಾಸಗಿ ಶೈಲಿಗಳು */
flex-shrink: 0;
}
.alert-message {
/* ಸಂದೇಶ ಪಠ್ಯಕ್ಕಾಗಿ ಖಾಸಗಿ ಶೈಲಿಗಳು */
flex-grow: 1;
}
ಪ್ರಮುಖ ಅಂಶ: ನಮ್ಮಲ್ಲಿ ಸ್ಪಷ್ಟವಾದ ಪ್ರತ್ಯೇಕತೆ ಇದೆ. ಮೇಲ್ಭಾಗದಲ್ಲಿರುವ @export ನಿಯಮಗಳು ಹೊರಗಿನ ಪ್ರಪಂಚದೊಂದಿಗೆ ಒಪ್ಪಂದವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತವೆ. ಕೆಳಗಿನ ಕ್ಲಾಸ್-ಆಧಾರಿತ ನಿಯಮಗಳು ಆಂತರಿಕ ಅನುಷ್ಠಾನದ ವಿವರಗಳಾಗಿವೆ. ಇತರ ಸ್ಟೈಲ್ಶೀಟ್ಗಳು .alert-icon ಅನ್ನು ನೇರವಾಗಿ ಟಾರ್ಗೆಟ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಮತ್ತು ಮಾಡಬಾರದು.
ಹಂತ 2: ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿ ಪ್ಯಾಕೇಜ್ ಬಳಸುವುದು (`app.css`)
ಈಗ, ನಮ್ಮ ಮುಖ್ಯ ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿ ನಮ್ಮ ಹೊಸ ಅಲರ್ಟ್ ಕಾಂಪೊನೆಂಟ್ ಅನ್ನು ಬಳಸೋಣ. ನಾವು ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಇಂಪೋರ್ಟ್ ಮಾಡುವುದರೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ. HTML ಸರಳ ಮತ್ತು ಸೆಮ್ಯಾಂಟಿಕ್ ಆಗಿ ಉಳಿಯುತ್ತದೆ.
HTML (`index.html`):
<div class="alert">
<span class="alert-icon">ℹ️</span>
<p class="alert-message">This is an informational message using our component package.</p>
</div>
CSS (`app.css`):
/* app.css */
/* 1. ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಇಂಪೋರ್ಟ್ ಮಾಡಿ. ಬ್ರೌಸರ್ ಈ ಫೈಲ್ ಅನ್ನು ಪಡೆಯುತ್ತದೆ,
ಅದರ ಶೈಲಿಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ, ಮತ್ತು ಅದರ ಎಕ್ಸ್ಪೋರ್ಟ್ಗಳನ್ನು ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡುತ್ತದೆ. */
@import url("alert-component.css");
/* 2. ಅಪ್ಲಿಕೇಶನ್ನ ಲೇಔಟ್ಗಾಗಿ ಜಾಗತಿಕ ಶೈಲಿಗಳು */
body {
font-family: sans-serif;
padding: 2em;
background-color: #f4f7f6;
}
ಈ ಹಂತದಲ್ಲಿ, ಅಲರ್ಟ್ ಕಾಂಪೊನೆಂಟ್ ಅದರ ಡೀಫಾಲ್ಟ್ ನೀಲಿ-ಥೀಮ್ನ ಶೈಲಿಯೊಂದಿಗೆ ಪುಟದಲ್ಲಿ ಕಾಣಿಸುತ್ತದೆ. alert-component.css ನಿಂದ ಶೈಲಿಗಳು ಅನ್ವಯವಾಗುತ್ತವೆ ಏಕೆಂದರೆ ಕಾಂಪೊನೆಂಟ್ನ ಮಾರ್ಕಪ್ .alert ಕ್ಲಾಸ್ ಅನ್ನು ಬಳಸುತ್ತದೆ, ಮತ್ತು ಸ್ಟೈಲ್ಶೀಟ್ ಅನ್ನು ಇಂಪೋರ್ಟ್ ಮಾಡಲಾಗಿದೆ.
ಹಂತ 3: ಕಾಂಪೊನೆಂಟ್ ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡುವುದು ಮತ್ತು ಥೀಮಿಂಗ್ ಮಾಡುವುದು
ಅಸ್ತವ್ಯಸ್ತವಾದ ಓವರ್ರೈಡ್ಗಳನ್ನು ಬರೆಯದೆ ಕಾಂಪೊನೆಂಟ್ ಅನ್ನು ಸುಲಭವಾಗಿ ಥೀಮ್ ಮಾಡುವ ಸಾಮರ್ಥ್ಯದಿಂದ ನಿಜವಾದ ಶಕ್ತಿ ಬರುತ್ತದೆ. ನಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಸ್ಟೈಲ್ಶೀಟ್ನಲ್ಲಿ ಸಾರ್ವಜನಿಕ API (ಕಸ್ಟಮ್ ಪ್ರಾಪರ್ಟಿಗಳು) ಅನ್ನು ಓವರ್ರೈಡ್ ಮಾಡುವ ಮೂಲಕ "success" ಮತ್ತು "danger" ರೂಪಾಂತರಗಳನ್ನು ರಚಿಸೋಣ.
HTML (`index.html`):
<div class="alert">
<p class="alert-message">This is the default informational alert.</p>
</div>
<div class="alert alert-success">
<p class="alert-message">Your operation was successful!</p>
</div>
<div class="alert alert-danger">
<p class="alert-message">An error occurred. Please try again.</p>
</div>
CSS (`app.css`):
@import url("alert-component.css");
body {
font-family: sans-serif;
padding: 2em;
background-color: #f4f7f6;
}
/* --- ಅಲರ್ಟ್ ಕಾಂಪೊನೆಂಟ್ಗೆ ಥೀಮಿಂಗ್ --- */
/* ನಾವು .alert-icon ನಂತಹ ಆಂತರಿಕ ಕ್ಲಾಸ್ಗಳನ್ನು ಟಾರ್ಗೆಟ್ ಮಾಡುತ್ತಿಲ್ಲ.
ನಾವು ಕೇವಲ ಅಧಿಕೃತ, ಸಾರ್ವಜನಿಕ API ಅನ್ನು ಬಳಸುತ್ತಿದ್ದೇವೆ. */
.alert-success {
--alert-bg-color: #f6ffed;
--alert-border-color: #b7eb8f;
--alert-text-color: #389e0d;
}
.alert-danger {
--alert-bg-color: #fff1f0;
--alert-border-color: #ffa39e;
--alert-text-color: #cf1322;
}
ಇದು ಕಾಂಪೊನೆಂಟ್ ಸ್ಟೈಲಿಂಗ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು ಒಂದು ಸ್ವಚ್ಛ, ದೃಢವಾದ ಮತ್ತು ನಿರ್ವಹಿಸಬಲ್ಲ ಮಾರ್ಗವಾಗಿದೆ. ಅಪ್ಲಿಕೇಶನ್ ಕೋಡ್ಗೆ ಅಲರ್ಟ್ ಕಾಂಪೊನೆಂಟ್ನ ಆಂತರಿಕ ರಚನೆಯ ಬಗ್ಗೆ ಏನನ್ನೂ ತಿಳಿದುಕೊಳ್ಳಬೇಕಾಗಿಲ್ಲ. ಇದು ಕೇವಲ ಸ್ಥಿರ, ದಾಖಲಿತ ಕಸ್ಟಮ್ ಪ್ರಾಪರ್ಟಿಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುತ್ತದೆ. ಕಾಂಪೊನೆಂಟ್ ಲೇಖಕರು ಆಂತರಿಕ ಕ್ಲಾಸ್ ಹೆಸರುಗಳನ್ನು .alert-message ನಿಂದ .alert__text ಗೆ ರಿಫ್ಯಾಕ್ಟರ್ ಮಾಡಲು ನಿರ್ಧರಿಸಿದರೆ, ಅಪ್ಲಿಕೇಶನ್ನ ಸ್ಟೈಲಿಂಗ್ ಮುರಿಯುವುದಿಲ್ಲ, ಏಕೆಂದರೆ ಸಾರ್ವಜನಿಕ ಒಪ್ಪಂದ (ಕಸ್ಟಮ್ ಪ್ರಾಪರ್ಟಿಗಳು) ಬದಲಾಗಿಲ್ಲ.
ಮುಂದುವರಿದ ಪರಿಕಲ್ಪನೆಗಳು ಮತ್ತು ಸಿನರ್ಜಿಗಳು
CSS ಪ್ಯಾಕೇಜ್ ಪರಿಕಲ್ಪನೆಯನ್ನು ಇತರ ಆಧುನಿಕ CSS ವೈಶಿಷ್ಟ್ಯಗಳೊಂದಿಗೆ ಮನಬಂದಂತೆ ಸಂಯೋಜಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ, ವೆಬ್ನಲ್ಲಿ ಸ್ಟೈಲಿಂಗ್ಗಾಗಿ ಶಕ್ತಿಯುತ, ಸುಸಂಬದ್ಧ ವ್ಯವಸ್ಥೆಯನ್ನು ರಚಿಸುತ್ತದೆ.
ಪ್ಯಾಕೇಜ್ಗಳ ನಡುವಿನ ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು
ಪ್ಯಾಕೇಜ್ಗಳು ಕೇವಲ ಅಂತಿಮ-ಬಳಕೆದಾರ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಅಲ್ಲ. ಅವುಗಳು ಅತ್ಯಾಧುನಿಕ ವ್ಯವಸ್ಥೆಗಳನ್ನು ನಿರ್ಮಿಸಲು ಪರಸ್ಪರ ಇಂಪೋರ್ಟ್ ಮಾಡಿಕೊಳ್ಳಬಹುದು. ಕೇವಲ ಡಿಸೈನ್ ಟೋಕನ್ಗಳನ್ನು (ಬಣ್ಣಗಳು, ಫಾಂಟ್ಗಳು, ಅಂತರ) ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡುವ ಒಂದು ಮೂಲಭೂತ "ಥೀಮ್" ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ.
/* theme.css */
@export --color-brand-primary: #6f42c1;
@export --font-size-base: 16px;
@export --spacing-unit: 8px;
ಒಂದು ಬಟನ್ ಕಾಂಪೊನೆಂಟ್ ಪ್ಯಾಕೇಜ್ ನಂತರ ಈ ಥೀಮ್ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಅದರ ಮೌಲ್ಯಗಳನ್ನು ಬಳಸಲು ಇಂಪೋರ್ಟ್ ಮಾಡಬಹುದು, ಹಾಗೆಯೇ ತನ್ನದೇ ಆದ, ಹೆಚ್ಚು ನಿರ್ದಿಷ್ಟವಾದ ಕಸ್ಟಮ್ ಪ್ರಾಪರ್ಟಿಗಳನ್ನು ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡಬಹುದು.
/* button-component.css */
@import url("theme.css"); /* ಡಿಸೈನ್ ಟೋಕನ್ಗಳನ್ನು ಇಂಪೋರ್ಟ್ ಮಾಡಿ */
/* ಬಟನ್ಗಾಗಿ ಸಾರ್ವಜನಿಕ API */
@export --btn-padding: var(--spacing-unit);
@export --btn-bg-color: var(--color-brand-primary);
/* ಬಟನ್ಗಾಗಿ ಖಾಸಗಿ ಶೈಲಿಗಳು */
.button {
background-color: var(--btn-bg-color);
padding: var(--btn-padding);
/* ... ಇತರೆ ಬಟನ್ ಶೈಲಿಗಳು */
}
ಇದು ಸ್ಪಷ್ಟವಾದ ಡಿಪೆಂಡೆನ್ಸಿ ಗ್ರಾಫ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ, ಶೈಲಿಗಳು ಎಲ್ಲಿಂದ ಹುಟ್ಟಿಕೊಂಡಿವೆ ಎಂಬುದನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ ಮತ್ತು ಸಂಪೂರ್ಣ ವಿನ್ಯಾಸ ವ್ಯವಸ್ಥೆಯಾದ್ಯಂತ ಸ್ಥಿರತೆಯನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
CSS ಸ್ಕೋಪ್ನೊಂದಿಗೆ ಏಕೀಕರಣ (@scope)
CSS ಪ್ಯಾಕೇಜ್ ಪ್ರಸ್ತಾಪವು ಮತ್ತೊಂದು ಅತ್ಯಾಕರ್ಷಕ ವೈಶಿಷ್ಟ್ಯಕ್ಕೆ ನಿಕಟವಾಗಿ ಸಂಬಂಧಿಸಿದೆ: @scope ಅಟ್-ರೂಲ್. @scope ನಿಮಗೆ DOM ಟ್ರೀಯ ನಿರ್ದಿಷ್ಟ ಭಾಗದೊಳಗೆ ಮಾತ್ರ ಶೈಲಿಗಳನ್ನು ಅನ್ವಯಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಇವೆರಡನ್ನೂ ಸಂಯೋಜಿಸಿದಾಗ, ಅವು ನಿಜವಾದ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಶನ್ ಅನ್ನು ನೀಡುತ್ತವೆ. ಒಂದು ಪ್ಯಾಕೇಜ್ ತನ್ನ ಶೈಲಿಗಳನ್ನು ಸ್ಕೋಪ್ ಬ್ಲಾಕ್ನೊಳಗೆ ವ್ಯಾಖ್ಯಾನಿಸಬಹುದು.
/* alert-component.css ನಲ್ಲಿ */
@scope (.alert) {
:scope {
/* .alert ಎಲಿಮೆಂಟ್ಗಾಗಿಯೇ ಇರುವ ಶೈಲಿಗಳು */
padding: 1em;
}
.alert-icon {
/* ಈ ಸೆಲೆಕ್ಟರ್ .alert ಎಲಿಮೆಂಟ್ನ ಒಳಗೆ ಇರುವ .alert-icon ಅನ್ನು ಮಾತ್ರ ಹೊಂದಿಸುತ್ತದೆ */
color: blue;
}
}
/* ಇದು ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ, ಏಕೆಂದರೆ ಇದು ಸ್ಕೋಪ್ನ ಹೊರಗಿದೆ */
.alert-icon { ... }
ಈ ಸಂಯೋಜನೆಯು ಪ್ಯಾಕೇಜ್ನ ಶೈಲಿಗಳು ನಿಯಂತ್ರಿತ API ಅನ್ನು ಹೊಂದಿರುವುದಲ್ಲದೆ, ಅವು ಭೌತಿಕವಾಗಿ ಸೋರಿಕೆಯಾಗದಂತೆ ಮತ್ತು ಪುಟದ ಇತರ ಭಾಗಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರದಂತೆ ತಡೆಯುತ್ತದೆ, ಹೀಗಾಗಿ ಜಾಗತಿಕ ನೇಮ್ಸ್ಪೇಸ್ ಸಮಸ್ಯೆಯನ್ನು ಅದರ ಮೂಲದಲ್ಲೇ ಪರಿಹರಿಸುತ್ತದೆ.
ವೆಬ್ ಕಾಂಪೊನೆಂಟ್ಸ್ನೊಂದಿಗೆ ಸಿನರ್ಜಿ
Shadow DOM ಅಂತಿಮ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಶನ್ ಅನ್ನು ಒದಗಿಸಿದರೂ, ಅನೇಕ ಕಾಂಪೊನೆಂಟ್ ಲೈಬ್ರರಿಗಳು ಸ್ಟೈಲಿಂಗ್ ಸಂಕೀರ್ಣತೆಗಳ ಕಾರಣದಿಂದ ಅದನ್ನು ಬಳಸುವುದಿಲ್ಲ. CSS ಪ್ಯಾಕೇಜ್ ವ್ಯವಸ್ಥೆಯು ಈ "ಲೈಟ್ DOM" ಕಾಂಪೊನೆಂಟ್ಗಳಿಗೆ ಶಕ್ತಿಯುತ ಪರ್ಯಾಯವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಇದು ಪೂರ್ಣವಾಗಿ Shadow DOM ಗೆ ಜಿಗಿಯುವ ಅಗತ್ಯವಿಲ್ಲದೆ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಶನ್ ಪ್ರಯೋಜನಗಳನ್ನು (@scope ಮೂಲಕ) ಮತ್ತು ಥೀಮಿಂಗ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಅನ್ನು (@export ಮೂಲಕ) ನೀಡುತ್ತದೆ. ವೆಬ್ ಕಾಂಪೊನೆಂಟ್ಸ್ ಬಳಸುವವರಿಗೆ, ಪ್ಯಾಕೇಜ್ಗಳು ಕಸ್ಟಮ್ ಪ್ರಾಪರ್ಟಿಗಳ ಮೂಲಕ ಕಾಂಪೊನೆಂಟ್ನ Shadow DOM ಗೆ ರವಾನೆಯಾಗುವ ಹಂಚಿಕೆಯ ವಿನ್ಯಾಸ ಟೋಕನ್ಗಳನ್ನು ನಿರ್ವಹಿಸಬಹುದು, ಇದು ಒಂದು ಪರಿಪೂರ್ಣ ಪಾಲುದಾರಿಕೆಯನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.
@package ಅನ್ನು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪರಿಹಾರಗಳೊಂದಿಗೆ ಹೋಲಿಸುವುದು
ಈ ಹೊಸ ನೇಟಿವ್ ವಿಧಾನವು ನಾವು ಇಂದು ಬಳಸುವ ವಿಧಾನಗಳಿಗೆ ಹೇಗೆ ಹೋಲಿಸುತ್ತದೆ?
- vs. CSS Modules: ಗುರಿ ಬಹಳ ಹೋಲುತ್ತದೆ - ಸ್ಕೋಪ್ ಮಾಡಿದ ಶೈಲಿಗಳು. ಆದಾಗ್ಯೂ, CSS ಪ್ಯಾಕೇಜ್ ವ್ಯವಸ್ಥೆಯು ಬ್ರೌಸರ್-ನೇಟಿವ್ ಮಾನದಂಡವಾಗಿದೆ, ಬಿಲ್ಡ್ ಟೂಲ್ ಸಂಪ್ರದಾಯವಲ್ಲ. ಇದರರ್ಥ ಸ್ಥಳೀಯವಾಗಿ ಸ್ಕೋಪ್ ಮಾಡಿದ ಕ್ಲಾಸ್ ಹೆಸರುಗಳನ್ನು ಪಡೆಯಲು ವಿಶೇಷ ಲೋಡರ್ಗಳು ಅಥವಾ ರೂಪಾಂತರಗಳ ಅಗತ್ಯವಿಲ್ಲ.
@exportನೊಂದಿಗೆ ಸಾರ್ವಜನಿಕ API ಕೂಡ ಹೆಚ್ಚು ಸ್ಪಷ್ಟವಾಗಿದೆ, CSS Modules ನಲ್ಲಿನ:globalಎಸ್ಕೇಪ್ ಹ್ಯಾಚ್ಗೆ ಹೋಲಿಸಿದರೆ. - vs. BEM: BEM ಸ್ಕೋಪ್ ಅನ್ನು ಅನುಕರಿಸುವ ಒಂದು ಹೆಸರಿಸುವ ಸಂಪ್ರದಾಯವಾಗಿದೆ; CSS ಪ್ಯಾಕೇಜ್ ವ್ಯವಸ್ಥೆಯು ಬ್ರೌಸರ್ನಿಂದ ಜಾರಿಗೊಳಿಸಲಾದ ನೈಜ ಸ್ಕೋಪ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ. ಇದು ಏನನ್ನಾದರೂ ಮುಟ್ಟದಂತೆ ವಿನಂತಿಸುವುದು ಮತ್ತು ಬೀಗ ಹಾಕಿದ ಬಾಗಿಲಿನ ನಡುವಿನ ವ್ಯತ್ಯಾಸ. ಇದು ಹೆಚ್ಚು ದೃಢವಾಗಿದೆ ಮತ್ತು ಮಾನವ ದೋಷಕ್ಕೆ ಕಡಿಮೆ ಗುರಿಯಾಗುತ್ತದೆ.
- vs. Tailwind CSS / ಯುಟಿಲಿಟಿ-ಫಸ್ಟ್: Tailwind ನಂತಹ ಯುಟಿಲಿಟಿ-ಫಸ್ಟ್ ಫ್ರೇಮ್ವರ್ಕ್ಗಳು ಸಂಪೂರ್ಣವಾಗಿ ವಿಭಿನ್ನ ಮಾದರಿಯಾಗಿದ್ದು, HTML ನಲ್ಲಿ ಕೆಳ-ಮಟ್ಟದ ಯುಟಿಲಿಟಿ ಕ್ಲಾಸ್ಗಳಿಂದ ಇಂಟರ್ಫೇಸ್ಗಳನ್ನು ರಚಿಸುವುದರ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುತ್ತವೆ. CSS ಪ್ಯಾಕೇಜ್ ವ್ಯವಸ್ಥೆಯು ಉನ್ನತ-ಮಟ್ಟದ, ಸೆಮ್ಯಾಂಟಿಕ್ ಕಾಂಪೊನೆಂಟ್ಗಳನ್ನು ರಚಿಸಲು ಸಜ್ಜಾಗಿದೆ. ಇವೆರಡೂ ಸಹ ಅಸ್ತಿತ್ವದಲ್ಲಿರಬಹುದು; ಒಬ್ಬರು Tailwind ನ
@applyಡೈರೆಕ್ಟಿವ್ ಅನ್ನು ಆಂತರಿಕವಾಗಿ ಬಳಸಿ ಕಾಂಪೊನೆಂಟ್ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ನಿರ್ಮಿಸಬಹುದು, ಹಾಗೆಯೇ ಥೀಮಿಂಗ್ಗಾಗಿ ಸ್ವಚ್ಛ, ಉನ್ನತ-ಮಟ್ಟದ API ಅನ್ನು ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡಬಹುದು.
CSS ಆರ್ಕಿಟೆಕ್ಚರ್ನ ಭವಿಷ್ಯ: ಡೆವಲಪರ್ಗಳಿಗೆ ಇದರ ಅರ್ಥವೇನು
ನೇಟಿವ್ CSS ಪ್ಯಾಕೇಜ್ ವ್ಯವಸ್ಥೆಯ ಪರಿಚಯವು ನಾವು CSS ಬಗ್ಗೆ ಯೋಚಿಸುವ ಮತ್ತು ಬರೆಯುವ ರೀತಿಯಲ್ಲಿ ಒಂದು ಸ್ಮಾರಕ ಬದಲಾವಣೆಯನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಇದು ವರ್ಷಗಳ ಸಮುದಾಯದ ಪ್ರಯತ್ನ ಮತ್ತು ನಾವೀನ್ಯತೆಯ ಪರಾಕಾಷ್ಠೆಯಾಗಿದ್ದು, ಅಂತಿಮವಾಗಿ ಪ್ಲಾಟ್ಫಾರ್ಮ್ನಲ್ಲೇ ಅಳವಡಿಸಲಾಗುತ್ತಿದೆ.
ಕಾಂಪೊನೆಂಟ್-ಫಸ್ಟ್ ಸ್ಟೈಲಿಂಗ್ ಕಡೆಗೆ ಒಂದು ಬದಲಾವಣೆ
ಈ ವ್ಯವಸ್ಥೆಯು ಕಾಂಪೊನೆಂಟ್-ಆಧಾರಿತ ಮಾದರಿಯನ್ನು CSS ಜಗತ್ತಿನಲ್ಲಿ ಪ್ರಥಮ-ದರ್ಜೆಯ ನಾಗರಿಕನಾಗಿ ದೃಢಪಡಿಸುತ್ತದೆ. ಇದು ಡೆವಲಪರ್ಗಳನ್ನು ಸಣ್ಣ, ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಮತ್ತು ನಿಜವಾಗಿಯೂ ಸ್ವಾವಲಂಬಿ UI ತುಣುಕುಗಳನ್ನು ನಿರ್ಮಿಸಲು ಪ್ರೋತ್ಸಾಹಿಸುತ್ತದೆ, ಪ್ರತಿಯೊಂದೂ ತನ್ನದೇ ಆದ ಖಾಸಗಿ ಶೈಲಿಗಳು ಮತ್ತು ಉತ್ತಮವಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಸಾರ್ವಜನಿಕ ಇಂಟರ್ಫೇಸ್ನೊಂದಿಗೆ. ಇದು ಹೆಚ್ಚು ಸ್ಕೇಲೆಬಲ್, ನಿರ್ವಹಿಸಬಲ್ಲ ಮತ್ತು ಸ್ಥಿತಿಸ್ಥಾಪಕ ವಿನ್ಯಾಸ ವ್ಯವಸ್ಥೆಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ.
ಸಂಕೀರ್ಣ ಬಿಲ್ಡ್ ಪರಿಕರಗಳ ಮೇಲಿನ ಅವಲಂಬನೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುವುದು
ಮಿನಿಫಿಕೇಶನ್ ಮತ್ತು ಲೆಗಸಿ ಬ್ರೌಸರ್ ಬೆಂಬಲದಂತಹ ಕಾರ್ಯಗಳಿಗಾಗಿ ಬಿಲ್ಡ್ ಪರಿಕರಗಳು ಯಾವಾಗಲೂ ಅವಶ್ಯಕವಾಗಿದ್ದರೂ, ನೇಟಿವ್ ಪ್ಯಾಕೇಜ್ ವ್ಯವಸ್ಥೆಯು ನಮ್ಮ ಬಿಲ್ಡ್ ಪೈಪ್ಲೈನ್ಗಳ CSS ಭಾಗವನ್ನು ನಾಟಕೀಯವಾಗಿ ಸರಳಗೊಳಿಸಬಹುದು. ಕ್ಲಾಸ್ ನೇಮ್ ಹ್ಯಾಶಿಂಗ್ ಮತ್ತು ಸ್ಕೋಪಿಂಗ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು ಕಸ್ಟಮ್ ಲೋಡರ್ಗಳು ಮತ್ತು ಪ್ಲಗಿನ್ಗಳ ಅಗತ್ಯವು ಕಣ್ಮರೆಯಾಗಬಹುದು, ಇದು ವೇಗದ ಬಿಲ್ಡ್ಗಳು ಮತ್ತು ಸರಳ ಕಾನ್ಫಿಗರೇಶನ್ಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ.
ಪ್ರಸ್ತುತ ಸ್ಥಿತಿ ಮತ್ತು ಮಾಹಿತಿ ಪಡೆಯುವುದು ಹೇಗೆ
CSS ಪ್ಯಾಕೇಜ್ ವ್ಯವಸ್ಥೆ, @export ಮತ್ತು ಸಂಬಂಧಿತ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಒಳಗೊಂಡಂತೆ, ಪ್ರಸ್ತುತ ಒಂದು ಪ್ರಸ್ತಾಪವಾಗಿದೆ ಎಂಬುದನ್ನು ನೆನಪಿಟ್ಟುಕೊಳ್ಳುವುದು ಬಹಳ ಮುಖ್ಯ. ಇದು ಇನ್ನೂ ಯಾವುದೇ ಸ್ಥಿರ ಬ್ರೌಸರ್ನಲ್ಲಿ ಲಭ್ಯವಿಲ್ಲ. ಈ ಪರಿಕಲ್ಪನೆಗಳನ್ನು W3C ಯ CSS ವರ್ಕಿಂಗ್ ಗ್ರೂಪ್ನಿಂದ ಸಕ್ರಿಯವಾಗಿ ಚರ್ಚಿಸಲಾಗುತ್ತಿದೆ ಮತ್ತು ಪರಿಷ್ಕರಿಸಲಾಗುತ್ತಿದೆ. ಇದರರ್ಥ ಇಲ್ಲಿ ವಿವರಿಸಿದ ಸಿಂಟ್ಯಾಕ್ಸ್ ಮತ್ತು ನಡವಳಿಕೆಯು ಅಂತಿಮ ಅನುಷ್ಠಾನದ ಮೊದಲು ಬದಲಾಗಬಹುದು.
ಪ್ರಗತಿಯನ್ನು ಅನುಸರಿಸಲು:
- ಅಧಿಕೃತ ಎಕ್ಸ್ಪ್ಲೇನರ್ಗಳನ್ನು ಓದಿ: CSSWG GitHub ನಲ್ಲಿ ಪ್ರಸ್ತಾಪಗಳನ್ನು ಹೋಸ್ಟ್ ಮಾಡುತ್ತದೆ. "CSS Scope" ಮತ್ತು ಸಂಬಂಧಿತ ಲಿಂಕಿಂಗ್/ಇಂಪೋರ್ಟಿಂಗ್ ವೈಶಿಷ್ಟ್ಯಗಳ ಕುರಿತ ಎಕ್ಸ್ಪ್ಲೇನರ್ಗಳನ್ನು ನೋಡಿ.
- ಬ್ರೌಸರ್ ವೆಂಡರ್ಗಳನ್ನು ಅನುಸರಿಸಿ: Chrome Platform Status, Firefox's standards positions, ಮತ್ತು WebKit's feature status pages ನಂತಹ ಪ್ಲಾಟ್ಫಾರ್ಮ್ಗಳ ಮೇಲೆ ಕಣ್ಣಿಡಿ.
- ಆರಂಭಿಕ ಅನುಷ್ಠಾನಗಳೊಂದಿಗೆ ಪ್ರಯೋಗ ಮಾಡಿ: ಒಮ್ಮೆ ಈ ವೈಶಿಷ್ಟ್ಯಗಳು Chrome Canary ಅಥವಾ Firefox Nightly ನಂತಹ ಬ್ರೌಸರ್ಗಳಲ್ಲಿ ಪ್ರಾಯೋಗಿಕ ಫ್ಲ್ಯಾಗ್ಗಳ ಅಡಿಯಲ್ಲಿ ಬಂದಾಗ, ಅವುಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ ನೀಡಿ.
ತೀರ್ಮಾನ: CSS ಗಾಗಿ ಒಂದು ಹೊಸ ಅಧ್ಯಾಯ
ಪ್ರಸ್ತಾವಿತ CSS ಪ್ಯಾಕೇಜ್ ವ್ಯವಸ್ಥೆಯು ಕೇವಲ ಹೊಸ ಅಟ್-ರೂಲ್ಗಳ ಗುಂಪಲ್ಲ; ಇದು ಆಧುನಿಕ, ಕಾಂಪೊನೆಂಟ್-ಚಾಲಿತ ವೆಬ್ಗಾಗಿ CSS ನ ಮೂಲಭೂತ ಮರುಕಲ್ಪನೆಯಾಗಿದೆ. ಇದು ವರ್ಷಗಳ ಸಮುದಾಯ-ಚಾಲಿತ ಪರಿಹಾರಗಳಿಂದ ಕಲಿತ ಕಠಿಣ ಪಾಠಗಳನ್ನು ತೆಗೆದುಕೊಂಡು ಅವುಗಳನ್ನು ನೇರವಾಗಿ ಬ್ರೌಸರ್ಗೆ ಸಂಯೋಜಿಸುತ್ತದೆ, CSS ಸ್ವಾಭಾವಿಕವಾಗಿ ಸ್ಕೋಪ್ ಆಗಿರುವ, ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ನಿರ್ವಹಿಸಲಾಗುವ ಮತ್ತು ಥೀಮಿಂಗ್ ಒಂದು ಸ್ವಚ್ಛ, ಪ್ರಮಾಣೀಕೃತ ಪ್ರಕ್ರಿಯೆಯಾಗಿರುವ ಭವಿಷ್ಯವನ್ನು ನೀಡುತ್ತದೆ.
ಎನ್ಕ್ಯಾಪ್ಸುಲೇಶನ್ಗಾಗಿ ನೇಟಿವ್ ಪರಿಕರಗಳನ್ನು ಒದಗಿಸುವ ಮೂಲಕ ಮತ್ತು ಸ್ಪಷ್ಟವಾದ ಸಾರ್ವಜನಿಕ API ಗಳನ್ನು ರಚಿಸುವ ಮೂಲಕ, ಈ ವಿಕಾಸವು ನಮ್ಮ ಸ್ಟೈಲ್ಶೀಟ್ಗಳನ್ನು ಹೆಚ್ಚು ದೃಢವಾಗಿಸಲು, ನಮ್ಮ ವಿನ್ಯಾಸ ವ್ಯವಸ್ಥೆಗಳನ್ನು ಹೆಚ್ಚು ಸ್ಕೇಲೆಬಲ್ ಮಾಡಲು ಮತ್ತು ಡೆವಲಪರ್ಗಳಾಗಿ ನಮ್ಮ ಜೀವನವನ್ನು ಗಣನೀಯವಾಗಿ ಸುಲಭಗೊಳಿಸಲು ಭರವಸೆ ನೀಡುತ್ತದೆ. ಪ್ರಸ್ತಾಪದಿಂದ ಸಾರ್ವತ್ರಿಕ ಬ್ರೌಸರ್ ಬೆಂಬಲದವರೆಗಿನ ರಸ್ತೆ ದೀರ್ಘವಾಗಿದೆ, ಆದರೆ ಗಮ್ಯಸ್ಥಾನವು ನಾಳೆಯ ವೆಬ್ನ ಸವಾಲುಗಳಿಗಾಗಿ ನಿಜವಾಗಿಯೂ ನಿರ್ಮಿಸಲಾದ ಹೆಚ್ಚು ಶಕ್ತಿಯುತ, ಊಹಿಸಬಹುದಾದ ಮತ್ತು ಸೊಗಸಾದ CSS ಆಗಿದೆ.